function is_valid = is_schedule_dependency_valid(schedule, is_ancestor)
    %IS_SCHEDULE_DEPENDENCY_VALID 对整个调度方案进行完整的依赖约束检查
    %
    %   is_valid = IS_SCHEDULE_DEPENDENCY_VALID(schedule, is_ancestor) 检查给定的
    %   调度方案(schedule)是否满足预先计算好的祖先-后代依赖关系矩阵(is_ancestor)。
    %   这是确保拓扑排序绝对正确的最终防线。
    %
    %   输入:
    %       schedule    - 列向量, 包含节点ID的执行序列。
    %       is_ancestor - 逻辑矩阵, is_ancestor(u, v) = true 表示 u 是 v 的祖先。
    %
    %   输出:
    %       is_valid    - 逻辑值, true 表示方案有效, false 表示无效。

    is_valid = true;
    % 注意：is_ancestor矩阵的大小可能大于schedule的长度，
    % 如果schedule是部分调度的话。我们以is_ancestor的维度为准。
    num_total_nodes = size(is_ancestor, 1);
    
    % 创建一个从"节点ID"到其"执行位置"的映射。
    % 数组大小设为总节点数，值为0表示该节点不在schedule中。
    node_positions = zeros(num_total_nodes, 1);
    node_positions(schedule) = 1:length(schedule);
    
    % 遍历所有可能的节点 u
    for u = 1:num_total_nodes
        % 寻找所有 u 的后代节点 v
        successors_of_u = find(is_ancestor(u, :));
        
        % 对于每一个后代v
        for v = successors_of_u
            pos_u = node_positions(u);
            pos_v = node_positions(v);
            
            % 如果祖先和后代都在schedule中，则进行检查
            if pos_u > 0 && pos_v > 0
                % 检查依赖: u 必须在 v 之前执行。
                % 如果 u 的位置大于等于 v 的位置，则违反了依赖约束。
                if pos_u >= pos_v
                    is_valid = false;
                    % 只要找到一个反例，就可以立即确定方案无效并返回。
                    return;
                end
            end
        end
    end
end